#include <spawn.h>
#include <iostream>
#include <pthread.h>

using namespace std;

int main()
{
    pid_t nPid;
    /*
    struct posix_spawnattr_t  
    {  
    short int __flags;  //用于指示在新进程中将要修改哪个属性  
    pid_t     __pgrp;   //新进程即将加入的进程组ID  
    sigset_t  __sd;     //新进程被迫默认使用的默认信号处理的信号集合  
    sigset_t  __ss;     //新进程将要使用的信号掩码  
    struct sched_param  __sp;  //将要赋给新进程的调度参数  
    int  __policy;      //新进程将要使用的调度策略  
    int  __pad[16];  
    };  
    */
    posix_spawnattr_t X;
    /*
    包含了新进程将要对文件描述符执行动作的信息的数据结构
    struct posix_spawn_file_actions_t  
    {  
    int __allocated;  
    int __used;  
    struct __spawn_action *actions;  
    int __pad[16];  
    };  
    */
    posix_spawn_file_actions_t Y;
    char* argv[] = {"/bin/ps", "-lf", NULL};
    char *envp[] = {"PROCESS=2"};

    posix_spawnattr_init(&X);
    posix_spawn_file_actions_init(&Y);

    posix_spawn(&nPid, "/bin/ps", &Y, &X, argv, envp);

    cout << "spawned PID" << nPid << endl;
    return 0;
}